package com.taldh.algorithm.array;

import org.junit.Assert;
import org.junit.Test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.stream.IntStream;

public class FindErrorNumsSolution {

    public int[] findErrorNums(int[] nums) {
//        int len = nums.length;
//        int sum = (len + 1) * len / 2;
//        int distinctSum = Arrays.stream(nums).distinct().sum();
//
//        int missNum = sum - distinctSum;
//
//
//        int[] sortedNums = Arrays.stream(nums).sorted().toArray();
//        for (int i = 0; i < sortedNums.length; i++) {
//            if (sortedNums[i] != i+1) {
//                return new int[]{sortedNums[i], missNum};
//            }
//        }


        int duplicateNum = 0;
        int missNum = 0;
        int len = nums.length;
        int[] filterArray = new int[10001];

        for (int num : nums) {
            if (filterArray[num] == 0) {
                filterArray[num] = 1;
            } else {
                duplicateNum = num;
            }
        }

        for (int i = 1; i < filterArray.length; i++) {
            if (filterArray[i] == 0) {
                missNum = i;
                break;
            }
        }

        return new int[]{duplicateNum, missNum};
    }

    @Test
    public void test() {
        Assert.assertArrayEquals(new int[]{2,3}, findErrorNums(new int[]{1,2,2,4}));
    }
    @Test
    public void test1() {
        Assert.assertArrayEquals(new int[]{3,1}, findErrorNums(new int[]{3,2,3,4}));
    }
}